=================================================================
ISTRUZIONI e SPECIFICHE per il FRAMMENTO 1 del PROGETTO "lcschat"
=================================================================

Il progetto prevede la realizzazione di un sistema client server che
implementa un chat distribuita. Il primo frammanto, realizzabile in C
sequenziale, prevede l'implementazione di una tabella hash che verra'
utilizzata all'interno del server per memorizzare i "canali di comunicazione"
con i diversi utenti connessi alla chat. In particolare la chiave (strings)
rappresentera' il nome dell'utente connesso, e l'intero rappresentera' un
identificatore univoco del canale corrispondente.

-----------------------------------------
Estrarre il materiale da lcschat_kit1.tar
-----------------------------------------
Creare una directory temporanea, copiare lcschat_kit1.tar 
nella directory e spostarsi nella directory appena creata. Es.

$$ mkdir Frammento1
$$ mv lcschat_kit1.tar Frammento1
$$ cd Frammento1

S-tarare i file del primo kit con

$$ tar xvf lcschat_kit1.tar

questa operazione crea nella directory corrente una directory "lcschat" che
contiene i seguenti file:

$$ ls lcschat/

gruppo-check.pl   README-1        
gruppo.txt        lcshash.h        
test1/            test-frag1.c
Makefile 

-----------------------------------------------
Descrizione dei file contenuti in lcschat_kit1:
-----------------------------------------------

README-1		: questo file
			  (NON MODIFICARE)

gruppo-check.pl		: uno script Perl che controlla il formato del file
			  gruppo.txt prima di effettuare la consegna
			  (NON MODIFICARE)

gruppo.txt		: un file di esempio di specifica dei componenti 
			  del gruppo (massimo 2)
			  (deve essere aggiornato con i dati dei componenti
			  reali del gruppo prima della consegna)

test-frag1.c		: un programma di test (scritto in C, intenzionalmente
			  senza commenti) per il test FINALE del codice
                          prodotto (NON MODIFICARE)

lcshash.h		: macro, strutture dati e prototipi delle funzioni da
			  realizzare per il frammento 1
			  (NON MODIFICARE)

Makefile		: makefile per il test finale del frammento e la
			  consegna 
			  (NON MODIFICARE)

test1/		        : directory con input/output per il testing
test1/lcshash.dat	: file di dati : (NON MODIFICARE)
test1/lcshash2.dat	: file di dati : (NON MODIFICARE)
test1/output.check	: file di output atteso  (NON MODIFICARE)

------------------------------------------------
Cosa deve essere realizzato per il frammento1 :
------------------------------------------------

Il primo frammento prevede la realizzazione delle funzioni che implementano una
tabella hash che contiene coppie (chiave,valore)
la chiave e' una stringa di lunghezza massima MAXS

Le strutture dati sono definite e commentate in lcshash.h assieme ai prototipi
delle funzioni da realizzare in lcshash.c. 

I commenti in lcshash.h spiegano le strutture dati da utilizzare
il comportamento delle varie funzioni, il significato dei parametri ed
i valori ritornati. 


------------------
Come procedere :
-----------------

0) leggere attentamente il README e capire il funzionamento il codice fornito
dai docenti 

1) analizzare accuratamente il file test1/output.check (che fornisce l'output
atteso dai test) per capire come deve essere formattato ogni elemento
della tabella

2) implementare le funzioni richieste in un unico file (lcshash.c)
   ed effettuare testing preliminare utilizzando un main() sviluppato dagli
   studenti allo scopo

3) testare il software complessivo con il main() (test-frag1.c) fornito dai
  docenti (usando il makefile). E' necessario prima settare la variabile di
  ambiente MALLOC_TRACE in modo che contenga la stringa "./mtrace.log" e poi
  procedere al test invocando il target "test1", cioe' eseguire quanto segue
        
       bash:~$ export MALLOC_TRACE="./.mtrace.log"
       bash:~$ make test1

  NOTA: (1) il file lcshash.c si deve trovare nella directory lcschat/
  (2) non deve essere modificata la struttura delle directory interne
  (3) E' importante che il test1 venga effettuato solo su
  un programma gia' funzionante altrimenti i risultati possono essere di
  difficile interpretazione, fuorvianti o inutili.

4) preparare la documentazione: ovvero commentare adeguatamente il file
   lcshash.c ed inserire una intestazione contenente il nome dei
   componenti del gruppo e una dichiarazione di originalita' ad esempio:

   /* File : lcshash.c
     Autori: Nino Bixio, Giuseppe Garibaldi
     Si dichiara che il contenuto di questo file e' in ogni sua parte opera
     originale degli autori sopracitati.  */

5) aggiornare il file "gruppo.txt" con i nomi ed i dati dei componenti del
   gruppo e 

6) consegnare il file ESCLUSIVAMENTE eseguendo

      bash:~$ make consegna1

   e seguendo le istruzioni. Anche in questo caso occorre  che la variabile
   MALLOC_TRACE sia settata a "./mtrace.log".
   Per la consegna e' necessaria l'utility "mpack" installata solo nelle
   macchine dei laboratori H, M ed I. Per consegne da altre macchine e'
   possibile scaricare il binario di 'mpack' dal sito del corso. 


---------------------------------------
 NOTE IMPORTANTI: LEGGERE ATTENTAMENTE
---------------------------------------

1) gli eleborati non consegnati con "make consegna1" non verranno accettati

2) tutti gli elaborati verranno confrontati fra di loro con tool automatici
   per stabilire eventali situazioni di PLAGIO. Se tali situazioni si
   verificheranno *tutti* gli elaborato coinvolti verranno annullati con
   conseguente perdita del bonus. 

3) Tutti gli studenti coinvolti in un episodio di PLAGIO comprovato dovranno
   re-implementare il frammento incriminato e saranno sottoposti ad una prova
   orale supplementare. In caso di recidive verranno esclusi dalla
   possibilita' di sostenere l'esame per TUTTO IL RESTO DELL'ANNO ACCADEMICO
   in CORSO.

4) Chi in sede di orale risulta palesemente non essere l'autore del software
   consegnato in uno dei frammenti verra' escluso dalla possibilita' di
   sostenere l'esame per TUTTO IL RESTO DELL'ANNO ACCADEMICO in CORSO.

5) Tutti i comportamenti scorretti ai punti 3 e 4 verranno segnalati
   ufficialmente al presidente del corso di laurea, che si riserva di
   decidere azioni disciplinari supplementari a quelle sopra descritte.
